草庐IT

c++ - R 和 C++ 迭代

全部标签

c++ - 使用迭代器实现状态机(ala 生成器)

最近我一直需要实现生成一堆数字的小类。如果C++有像python这样的生成器,那将是非常方便的,但不幸的是,事实并非如此。所以我一直在思考如何最好地实现这些类型的对象,以便于迭代和组合。当我们想到容器上的迭代器时,它们基本上只保存元素的索引,并且大部分信息都在容器本身中。这允许多个迭代器同时引用集合中的不同元素。谈到状态机时,显然迭代器必须保持整个状态,因为多个迭代器需要能够独立。从这个意义上说,状态机类更像是这些迭代器的“构建器”,这些迭代器是实际的状态机。作为玩具示例,我已经实现了可以在循环中使用的范围生成器(alaxrangeinpython)://usingrange-forf

c++ - 实现如何保证迭代器的复制构造函数不抛出?

C++11标准的条款23.2.1.10说"nocopyctorofareturnediteratorthrowsanexception"这是否基本上说明了迭代器的复制ctor是否有可能甚至不抛出bad_alloc大概(留下迭代器可能只是一个指针的情况,这里没有问题)因为它将使用已经构建的信息“返回的迭代器”?因为它是按值传递的,所以堆栈会在被调用函数中分配,因此可以保证没有内存问题吗? 最佳答案 那一段讲的是标准库中容器使用的迭代器。众所周知,这些迭代器可以通过多种方式实现,因此它们在复制时不会抛出异常。例如,它们都不必使用任何动态

c++ - 并行迭代宏的替代方案?

这将是一个很长的故事,但也许你们中的一些人愿意研究这个案例。我正在从事并行图算法开发。我选择了一个名为STINGER的尖端HPC并行图数据结构。.STINGER的使命声明如下:"STINGERshouldprovideacommonabstractdatastructuresuchthatthelargegraphcommunitycanquicklyleverageeachothers'researchdevelopments.[...] AlgorithmswrittenforSTINGERcaneasilybetranslated/portedbetweenmultiplelan

c++ - 如何使用缓存技术提高性能

你好,我正在尝试运行一个程序,该程序使用蛮力和缓存技术(如此处的pdf)找到最接近的对:CachingPerformanceStanford我的原始代码是:floatcompare_points_BF(intN,point*P){inti,j;floatdistance=0,min_dist=FLT_MAX;point*p1,*p2;unsignedlonglongcalc=0;for(i=0;i这个程序大约给出了这些运行时间:N81921638432768655361310722621445242881048576seconds0,0700,2801,1305,54018,08072

c++ - std::copy 的限制是否比 std::memcpy 更宽松?

与regardtothe问题copyvs.memcpyvsmemmove(这里的信息非常好,顺便说一句。),我一直在阅读,在我看来,这不像口语中所说的,例如cppreference注意:memcpy已更改为memmove,因为采用了此引用。--NotesInpractice,implementationsofstd::copyavoidmultipleassignmentsandusebulkcopyfunctionssuchasstd::memcpyifthevaluetypeisTriviallyCopyable--std::copy(也不是std::copy_backward)不

c++ - 用一个线程做一个部分,用多个线程做一个for循环

我正在使用OpenMP,我想生成线程,以便一个线程执行一段代码并完成,与运行并行for循环迭代的N个线程并行。执行应该是这样的:SectionA(onethread)||SectionB(parallel-for,multiplethreads)|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||V||VVVVVVVVVV我不能只用#pragmaomponce编写并行for,因为我不希望执行A部分的线程执行for循环。我试过这个:#pragmaompparallelsections{#pragmaompsec

c++ - 数组的迭代方向

假设我们有两个基本类型的数组a和b(比如float),我们需要计算a[i]+b[i]为每个有效索引i,并存储结果。迭代数组以最大化缓存命中率的最佳方法是什么?是从前到后、从后到前还是其他? 最佳答案 对于这种操作,您应该使用编译器的自动矢量化。将小的i迭代到大的i。此外,答案取决于您所说的“存储结果”的含义以及您要迭代的项目的数量n。如果您的意思是c[i]=a[i]+b[i]并且n不是太小,那么您的编译器的自动矢量化器将对此进行最佳优化没有任何更多的变化。即使是MSVC也会得到正确的(至少对于SSE)。您的编译器将不得不对n进行一些

c++ - 值初始化 vs Calloc vs 手动初始化速度

哪个最快?我尝试用这个基本容量测试三种方法的速度:#include"stdafx.h"#include"stdlib.h"#include"stdio.h"#include"time.h"int_tmain(intargc,_TCHAR*argv[]){constunsignedlonglongARR_SIZ=0x4fffffff;clock_tval_init_dur,calloc_dur,manual_dur;clock_tcur=clock();char*val_init=newchar[ARR_SIZ]();clock_tafter=clock();val_init_dur=a

c++ - 返回 C++ 迭代器引用

它按预期工作的示例#include#includestructMyClass{conststd::vector::iterator&begin(){returnmyvec.begin();}conststd::vector::iterator&end(){returnmyvec.end();}std::vectormyvec;};intmain(){std::vectormainvec(8,0);MyClassmyClass;myClass.myvec=mainvec;for(std::vector::iteratorit=myClass.begin();it!=myClass.end

c++ - 使用 boost spirit qi 解析器迭代填充 BGL 图

此问题是"Iterativeupdateofabstractsyntaxtreewithboostspirit"的后续问题.已知:解析器语法允许递归要求是:解析器的AST必须是BGL图。每个解析器步骤的输入可以是一对多的符号想法:此处显示了有关将spirit解析为BGL图的一些基本想法Usingboostgraphlibrary:howtocreateagraph...,但不完全满足要求,因为我希望能够迭代地解析一对多符号。猜测BGL图和spirit解析器必须相互了解一些信息才能在正确的位置填充数据。首先想到的是解析器必须能够处理图的顶点。解决方案,例如Usingsemanticact